home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 1996 September & October / Amiga-CD 1996 #9-10.iso / demos / storm-c / stormwizard / source / c-source / palette / palette.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-06  |  8.0 KB  |  304 lines

  1. #include    <stdio.h>
  2. #include    <stdlib.h>
  3. #include    <string.h>
  4.  
  5. #include    <clib/alib_protos.h>
  6. #include    <pragma/dos_lib.h>
  7. #include    <pragma/exec_lib.h>
  8. #include    <pragma/graphics_lib.h>
  9. #include    <pragma/intuition_lib.h>
  10. #include    <pragma/utility_lib.h>
  11. #include    <pragma/wizard_lib.h>
  12.  
  13. #include    <exec/exec.h>
  14. #include    <exec/memory.h>
  15. #include    <gadgets/colorwheel.h>
  16. #include    <gadgets/gradientslider.h>
  17. #include    <intuition/gadgetclass.h>
  18. #include    <intuition/intuition.h>
  19. #include    <utility/utility.h>
  20. #include    <libraries/wizard.h>
  21.  
  22. struct Library *UtilityBase;
  23. struct Library *WizardBase;
  24. struct Library *ColorWheelBase;
  25.  
  26. APTR    MySurface;
  27. struct Screen *MyScreen;
  28. struct DrawInfo *MyDrInfo;
  29.  
  30. struct WizardWindowHandle *MyWinHandle;
  31. struct NewWindow *MyNewWindow;
  32. struct Window *MyWindow;
  33.  
  34. struct Gadget *MyGadgets[40];
  35.  
  36. struct Gadget *MyColorWheel;
  37.  
  38. struct TextAttr MyTextAttr=
  39. {
  40.     "topaz.font",
  41.     8,0,0
  42. };
  43.  
  44. struct MyListNode
  45. {
  46.     struct WizardListNode Node;
  47.     struct TagItem NodeTags[3];
  48.     char Name[256];
  49. };
  50.  
  51. struct MinList MyList;
  52.  
  53.  
  54. struct VImageDual
  55. {
  56.     struct WizardVImage VImage;
  57.  
  58.     ULONG *Descr0;
  59.     ULONG *Descr1;
  60.  
  61. };
  62.  
  63.  
  64. ULONG MyVImageDescrNormal[]=
  65. {
  66.     WVICMD_TAGCOLOR,0,                        // TagFarbe Nr 0 setzen
  67.     WVICMD_MOVE,0,2,2,                        // farbige Fläche zeichnen
  68.     WVICMD_RECTFILL,2,-2,-2,
  69.  
  70.     WVICMD_COLOR,0,                                // Hintergrundfarbe
  71.     WVICMD_MOVE,0,0,0,                        // untere Kante
  72.     WVICMD_DRAW,1,0,0,-1,                    // löschen
  73.     WVICMD_MOVE,3,0,0,                        // hier die untere
  74.     WVICMD_DRAW,2,0,0,-1,
  75.  
  76.     WVICMD_COLOR,WZRD_SHADOWPEN,    // Rahmenfarbe setzen
  77.     WVICMD_MOVE,0,0,1,                        // und den Rahmen
  78.     WVICMD_DRAW,1,0,1,-1,                    // um unsere Fläche
  79.     WVICMD_DRAW,2,0,-1,-1,                // zeichnen
  80.     WVICMD_DRAW,3,0,-1,-1,
  81.     WVICMD_DRAW,0,0,1,-1,
  82.  
  83.     WVICMD_MOVE,0,1,2,                        // wir zeichnen aber
  84.     WVICMD_DRAW,3,1,-2,-1,                // die vertikalen
  85.  
  86.     WVICMD_MOVE,1,-1,2,                        // Linien doppelt
  87.     WVICMD_DRAW,2,-1,-2,-1,
  88.  
  89.     WVICMD_END
  90. };
  91.  
  92.  
  93. ULONG MyVImageDescrSelected[]=
  94. {
  95.     WVICMD_TAGCOLOR,1,                        // TagFarbe Nr 1 setzen
  96.     WVICMD_MOVE,0,2,2,                        // farbige Fläche zeichnen
  97.     WVICMD_RECTFILL,2,-2,-2,
  98.  
  99.     WVICMD_COLOR,WZRD_FILLPEN,
  100.     WVICMD_MOVE,0,0,0,                        // untere Kante
  101.     WVICMD_DRAW,1,0,0,-1,                    // löschen
  102.     WVICMD_MOVE,3,0,0,                        // hier die untere
  103.     WVICMD_DRAW,2,0,0,-1,
  104.  
  105.     WVICMD_COLOR,WZRD_SHADOWPEN,    // Rahmenfarbe setzen
  106.     WVICMD_MOVE,0,0,1,                        // und den Rahmen
  107.     WVICMD_DRAW,1,0,1,-1,                    // um unsere Fläche
  108.     WVICMD_DRAW,2,0,-1,-1,                // zeichnen
  109.     WVICMD_DRAW,3,0,-1,-1,
  110.     WVICMD_DRAW,0,0,1,-1,
  111.  
  112.     WVICMD_MOVE,0,1,2,                        // wir zeichnen aber
  113.     WVICMD_DRAW,3,1,-2,-1,                // die vertikalen
  114.  
  115.     WVICMD_MOVE,1,-1,2,                        // Linien doppelt
  116.     WVICMD_DRAW,2,-1,-2,-1,
  117.  
  118.     WVICMD_END
  119. };
  120.  
  121.  
  122. struct VImageDual MyVImage=
  123. {
  124.     0,0,0,0,
  125.     0,
  126.  
  127.     MyVImageDescrNormal,
  128.     MyVImageDescrSelected
  129.  
  130. };
  131.  
  132. BOOL CreateNode(char *name,UWORD Pen,UWORD SPen)
  133. {
  134.     BOOL Flag=FALSE;
  135.  
  136.     struct MyListNode *NewNode;
  137.  
  138.     if (NewNode=AllocVec(sizeof(MyListNode),MEMF_CLEAR|MEMF_PUBLIC))
  139.     {
  140.         Flag=TRUE;
  141.  
  142.         NewNode->Node.Entrys=1;
  143.  
  144.         NewNode->Node.StringEntrys[0].Pen=WZRD_TEXTPEN;
  145.         NewNode->Node.StringEntrys[0].SPen=WZRD_FILLTEXTPEN;
  146.  
  147.         NewNode->Node.StringEntrys[0].String=NewNode->Name;
  148.  
  149.         NewNode->Node.VImage=(struct WizardVImage *)&MyVImage;
  150.  
  151.         NewNode->Node.VImageTags=(struct TagItem *)&NewNode->NodeTags;
  152.  
  153.         NewNode->NodeTags[0].ti_Tag=WVIA_Color0;
  154.         NewNode->NodeTags[0].ti_Data=Pen;
  155.  
  156.         NewNode->NodeTags[1].ti_Tag=WVIA_Color1;
  157.         NewNode->NodeTags[1].ti_Data=SPen;
  158.  
  159.         NewNode->NodeTags[2].ti_Tag=0;
  160.         NewNode->NodeTags[2].ti_Data=0;
  161.  
  162.         strcpy(NewNode->Name,name);
  163.  
  164.         AddTail((struct List *)&MyList,(struct Node *)NewNode);
  165.     }
  166.  
  167.     return(Flag);
  168. }
  169.  
  170. main()
  171. {
  172.     BOOL Flag=FALSE;
  173.  
  174.     struct IntuiMessage *msg;
  175.  
  176.     NewList((struct List *)&MyList);
  177.  
  178.     if (UtilityBase=OpenLibrary("utility.library",0L))
  179.     {
  180.         if (WizardBase=OpenLibrary("wizard.library",0L))
  181.         {
  182.             if (ColorWheelBase=OpenLibrary("gadgets/colorwheel.gadget",0L))
  183.                 {
  184.                     if (MySurface=WZ_OpenSurface("palette.wizard",0,TAG_DONE))
  185.                     {
  186.                         if (MyScreen=OpenScreenTags(0L,SA_LikeWorkbench,TRUE,
  187.                                                                                         SA_Width,640,
  188.                                                                                         SA_Height,304,
  189.                                                                                         SA_Depth,8,
  190.                                                                                         SA_SharePens,TRUE,
  191.                                                                                         SA_Font,&MyTextAttr,
  192.                                                                                         SA_Title,"Palette Preferences",
  193.                                                                                         TAG_DONE))
  194.                         {
  195.                             ULONG RGBValues[3*4];
  196.  
  197.                             GetRGB32(MyScreen->ViewPort.ColorMap,252,4,(ULONG *)&RGBValues);
  198.  
  199.                             SetRGB32(&MyScreen->ViewPort,4,RGBValues[0],RGBValues[1],RGBValues[2]);
  200.                             SetRGB32(&MyScreen->ViewPort,5,RGBValues[3],RGBValues[4],RGBValues[5]);
  201.                             SetRGB32(&MyScreen->ViewPort,6,RGBValues[6],RGBValues[7],RGBValues[8]);
  202.                             SetRGB32(&MyScreen->ViewPort,7,RGBValues[9],RGBValues[10],RGBValues[11]);
  203.  
  204.  
  205.                             if (MyDrInfo=GetScreenDrawInfo(MyScreen))
  206.                             {
  207.                                 if (MyColorWheel=NewObject(0L,"colorwheel.gadget",
  208.                                                                                             GA_ID,50,
  209.  
  210.                                                                                             GA_Left,95,
  211.                                                                                             GA_Top,41,
  212.                                                                                             GA_Width,141,
  213.                                                                                             GA_Height,85,
  214.  
  215.                                                                                             GA_DrawInfo,MyDrInfo,
  216.                                                                                             WHEEL_Screen,MyScreen,
  217.                                                                                             TAG_DONE))
  218.                                 {
  219.  
  220.                                     if (MyWinHandle=WZ_AllocWindowHandle(MyScreen,0,MySurface,TAG_DONE))
  221.                                         {
  222.                                             if (MyNewWindow=WZ_CreateWindowObj(MyWinHandle,1,
  223.                                                                                                 WWH_GadgetArray,&MyGadgets,
  224.                                                                                                 WWH_GadgetArraySize,sizeof(MyGadgets),
  225.                                                                                                 WWH_PreviousGadget,MyColorWheel,
  226.                                                                                                 TAG_DONE))
  227.                                             {
  228.                                                 MyNewWindow->TopEdge=MyScreen->BarHeight;
  229.  
  230.                                                 MyNewWindow->FirstGadget=MyColorWheel;
  231.                                                 /* Wir wollen schliesslich unsere eigenen **
  232.                                                 ** Gadgets auch beim Betriebssystem       **
  233.                                                 ** angemeldet wissen !                    */
  234.  
  235.                                                 if (CreateNode("Background",WZRD_BACKGROUNDPEN,WZRD_BACKGROUNDPEN))
  236.                                                     if (CreateNode("Text",WZRD_TEXTPEN,WZRD_TEXTPEN))
  237.                                                         if (CreateNode("Important Text",WZRD_HIGHLIGHTTEXTPEN,WZRD_HIGHLIGHTTEXTPEN))
  238.                                                             if (CreateNode("Bright Edges",WZRD_SHINEPEN,WZRD_SHINEPEN))
  239.                                                                 if (CreateNode("Dark Edges",WZRD_SHADOWPEN,WZRD_SHADOWPEN))
  240.                                                                     if (CreateNode("Active Windowtitle Bars",WZRD_FILLPEN,WZRD_FILLPEN))
  241.                                                                         if (CreateNode("Active Window Titles",WZRD_FILLTEXTPEN,WZRD_FILLTEXTPEN))
  242.                                                                             if (CreateNode("Menu Background",WZRD_BARBLOCKPEN,WZRD_BARBLOCKPEN))
  243.                                                                                 if (CreateNode("Menu Text",WZRD_BARDETAILPEN,WZRD_BARDETAILPEN))
  244.                                                                                     {
  245.                                                                                         SetGadgetAttrs(MyGadgets[19],0L,0L,WLISTVIEWA_List,&MyList,
  246.                                                                                                         WLISTVIEWA_ImageWidth,16,
  247.                                                                                                         TAG_DONE);
  248.  
  249.                                                                                         if (MyWindow=WZ_OpenWindow(MyWinHandle,MyNewWindow,
  250.                                                                                                 WA_AutoAdjust,TRUE,
  251.                                                                                                 TAG_DONE))
  252.                                                                                         {
  253.                                                                                             do
  254.                                                                                             {
  255.                                                                                                 WaitPort(MyWindow->UserPort); /* Auf CloseWindow warten*/
  256.  
  257.                                                                                                 if (msg=(struct IntuiMessage *)GetMsg(MyWindow->UserPort))
  258.                                                                                                 {
  259.                                                                                                     switch (msg->Class)
  260.                                                                                                     {
  261.                                                                                                         case IDCMP_MENUPICK:
  262.                                                                                                         {
  263.                                                                                                             if (msg->Code==FULLMENUNUM(0,3,-1))
  264.                                                                                                                 Flag=TRUE;
  265.                                                                                                         }
  266.                                                                                                         break;
  267.                                                                                                     }
  268.                                                                                                     ReplyMsg((struct Message *)msg);
  269.                                                                                                 }
  270.                                                                                             } while (Flag!=TRUE);
  271.  
  272.                                                                                             WZ_CloseWindow(MyWinHandle);
  273.                                                                                         }
  274.                                                                                     }
  275.  
  276.                                             }
  277.                                             WZ_FreeWindowHandle(MyWinHandle);
  278.                                         }
  279.                                     DisposeObject(MyColorWheel);
  280.                                 }
  281.                                 FreeScreenDrawInfo(MyScreen,MyDrInfo);
  282.                             }
  283.                             CloseScreen(MyScreen);
  284.                         }
  285.  
  286.                         WZ_CloseSurface(MySurface);
  287.                     }
  288.                     CloseLibrary(ColorWheelBase);
  289.                 }
  290.                 CloseLibrary(WizardBase);
  291.             }
  292.             CloseLibrary(UtilityBase);
  293.         }
  294.  
  295.  
  296.  
  297.         while (MyList.mlh_Head->mln_Succ)
  298.         {
  299.             struct Node *t=(struct Node*)MyList.mlh_Head;
  300.  
  301.             Remove(t);
  302.             FreeVec((APTR)t)
  303.         }
  304. };